﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Menu;
using UricaoWeb.LogicaDeNegocios.Restaurantes;
using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;
using System.Windows.Forms;

namespace UricaoWeb.Presentacion
{
    public partial class API_menu_BuscarMenu : API_Seguridad_Principal
    {
        List<LogicaDeNegocios.Menu.Menu> listaMenu = new List<LogicaDeNegocios.Menu.Menu>(); // para el manejo de listas de menu
        List<Restaurante> listaRestaurante = new List<Restaurante>(); // para el manejo de listas de restaurante
        List<Datos.ConexionBD.Propiedad.Hotel> listaHotel = new List<Datos.ConexionBD.Propiedad.Hotel>(); // para el manejo de lista de hotel
        public static int idHotel = 0;  // variable para almacenar el id del hotel
        public static int idRestaurante = 0; // variable para almacenar el id del restaurante
        public static int idMenu = 0; // variable para almacenar el id del menu
        public static bool camposVacios = false; // auxiliar para comprobar campos vacios


        ///<sumary>
        ///Metodo para recargar la pagina
        ///</sumary>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();

            Logica_Usuario _usuario = (Logica_Usuario)Session["user"]; // obtiene el usuario conectado
            Session["idHotel"] = _usuario.FkHotel; // obtiene la id del hotel en el que se encuentra el usuario
            idHotel = int.Parse(Session["idHotel"].ToString()); // transforma el id en numero

            listaHotel = NegocioMenu.ObtenerHoteles(); // se tiene la lista de hoteles
            foreach (Datos.ConexionBD.Propiedad.Hotel iterador in listaHotel) // para comparar con el idHotel
                if (idHotel == iterador.IdHotel)    // de la sesion y asi poder obtener el nombre
                    this.DDLHotel.Text = iterador.nombreHotel;  // del hotel y mostrarlo

            this.DDLHotel.Enabled = false;
            this.LMensaje.Visible = false;

            if (!IsPostBack) //si no se esta recargando por primera vez
            {
                listaHotel = NegocioMenu.ObtenerHoteles(); // se almacenan los hoteles en la lista
                foreach (Datos.ConexionBD.Propiedad.Hotel iterador in listaHotel) // se reccorren para introducir los hoteles
                    this.DDLHotel.Items.Add(iterador.nombreHotel);  // en el dropdownlist de hoteles

                this.DDLRestaurantes.Items.Clear(); // limpia el combo de restaurantes
                this.DDLRestaurantes.Items.Add("Seleccionar..."); //coloca un por defecto Seleccionar en la lista
                this.DDLMenus.Items.Clear(); // limpia el combo de menus
                this.DDLMenus.Items.Add("Seleccionar..."); //coloca un por defecto Seleccionar en la lista

                listaRestaurante = NegocioMenu.ObtenerRestaurantesPorHotel(idHotel); // busca los restaurantes segun el id del hotel
                foreach (Restaurante iterador in listaRestaurante) // recorre la lista de restaurantes
                    this.DDLRestaurantes.Items.Add(iterador.NombreRestaurante); //anade los restaurantes al combo
            }


        }

        ///<sumary>
        ///Metodo para validar campos vacios e incorrectos 
        ///Retorno: verdadero en caso de haber campo vacio o error y falso si no los hay
        ///</sumary>
        public bool ValidarCamposVaciosInvalidos()
        {

            if (this.DDLRestaurantes.Text == " " || this.DDLRestaurantes.Text == "Seleccionar...")
            {
                this.LVRestaurante.Visible = true;
                camposVacios = true;
            }
            else
            {
                this.LVRestaurante.Visible = false;
                camposVacios = false;
            }

            if (this.DDLMenus.Text == " " || this.DDLMenus.Text == "Seleccionar...")
            {
                this.LVMenu.Visible = true;
                camposVacios = true;
            }
            else
            {
                this.LVMenu.Visible = false;
                camposVacios = false;
            }

            return camposVacios;
        }

        protected void BCancelar_Click(object sender, EventArgs e)
        {

        }

        ///<sumary>
        ///Maneja lo que ocurre cuando le dan al boton aceptar
        ///</sumary>
        protected void BAceptar_Click(object sender, EventArgs e)
        {

            if (ValidarCamposVaciosInvalidos() == false)// valida que no haya campos vacios ni errados
            {
                Response.Redirect("~/Presentacion/API_menu_ModificarMenu.aspx"); // como no hay errores
            }                                                                 //llama a la ventana modificar menu
            else
                this.LMensaje.Visible = true;   // muestra mensaje de error

        }

        ///<sumary>
        ///Metodo para cargar los menu del restaurante elegidos por los unsuario
        ///</sumary>
        protected void DDLRestaurantes_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.DDLRestaurantes.Items.Remove("Seleccionar...");
            this.DDLMenus.Items.Clear();

            listaRestaurante = NegocioMenu.ObtenerRestaurantesPorHotel(idHotel);
            foreach (Restaurante iterador in listaRestaurante)
                if (this.DDLRestaurantes.Text == iterador.NombreRestaurante)
                    idRestaurante = iterador.IdRestaurante;

            this.DDLMenus.Items.Add("Seleccionar...");

            listaMenu = NegocioMenu.ObtenerMenusPorRestaurante(idRestaurante);
            foreach (LogicaDeNegocios.Menu.Menu iterador in listaMenu)
                this.DDLMenus.Items.Add(iterador.NombreMenu);

            if (ValidarCamposVaciosInvalidos() == false)
                this.LMensaje.Visible = false;
            else
                this.LMensaje.Visible = true;
        }

        ///<sumary>
        ///Metodo para volver a cargar la lista de menus cuando seleccionen otra opcion 
        ///</sumary>
        protected void DDLMenus_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.DDLMenus.Items.Remove("Seleccionar...");

            listaMenu = NegocioMenu.ObtenerMenusPorRestaurante(idRestaurante);
            foreach (LogicaDeNegocios.Menu.Menu iterador in listaMenu)
                if (this.DDLMenus.Text == iterador.NombreMenu)
                    idMenu = iterador.IdMenu;

            if (ValidarCamposVaciosInvalidos() == false)
                this.LMensaje.Visible = false;
            else
                this.LMensaje.Visible = true;
        }
    }
}